using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraTest2 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        // 获取摄像机
        // 获取主摄像机; 要求主摄像机的Tag必须是MainCamera; 是可以有多个摄像机标记Tag是MainCamera的, 但是一般游戏中都是只有一个主摄像机
        print(Camera.main.name);

        // 获取场景上的摄像机数量
        print("场景上的摄像机数量: " + Camera.allCamerasCount);

        print("开始打印所有摄像机信息");
        Camera[] allCameras = Camera.allCameras;
        for (var i = 0; i < allCameras.Length; i++)
        {
            print(allCameras[i].name);
        }

        print("结束打印所有摄像机信息");

        // 2. 渲染相关委托
        // 做图形处理可能会用到
        // 摄像机剔除前处理的委托函数
        Camera.onPreCull += (c) =>
        {

        };

        // 摄像机渲染前处理的委托
        Camera.onPreRender += (c) =>
         {

         };

        // 摄像机渲染后处理的委托
        Camera.onPostRender += (c) =>
        {

        };

        // 界面上相机的参数都可以在Camera中获取到
        //Camera.main.depth = 10;

        // 世界坐标系 转换为 屏幕坐标系
        // 屏幕坐标系以左下角为原点, worldToScreenPoint.x就是屏幕屏幕下底边的坐标, worldToScreenPoint.y就是屏幕左边的坐标, worldToScreenPoint.z是当前物体和摄像机之间的距离
        // 可能会用它来做头顶的血条
        Vector3 worldToScreenPoint = Camera.main.WorldToScreenPoint(this.transform.position);
        print("世界坐标系 转换为 屏幕坐标系: " + worldToScreenPoint);
    }

    // Update is called once per frame
    void Update()
    {
        // 将屏幕坐标系转世界坐标系
        print("将屏幕坐标系转世界坐标系" + Camera.main.ScreenToWorldPoint(Input.mousePosition));
    }
}